import { $t } from '#/locales'
import { getImgUrl } from "#/utils/getImgUrl"

/**
 * 将 ArrayBuffer 转为可用于 <img src> 的 base64 Data URL
 */
export function arrayBufferToImageBase64(buffer: ArrayBuffer, mimeType: string = 'image/png'): string {
  const bytes = new Uint8Array(buffer)
  let binary = ''
  bytes.forEach(byte => (binary += String.fromCharCode(byte)))
  return `data:${mimeType};base64,${btoa(binary)}`
}

/**
 * 获取图片预览地址（可复用）
 * 传入 OBS 的 key 或可访问的图片 URL
 * 返回可直接用于 <img> 的预览地址（优先 base64 Data URL，或回退为可访问的 URL）
 */
export async function getPreviewImageUrl(source: string, options?: { mimeType?: string }): Promise<string> {
  if (!source) return ''

  try {
    const res = (await getImgUrl(source)) as any

    // 大多数场景 getImgUrl 返回的是 ArrayBuffer
    if (res instanceof ArrayBuffer) {
      return arrayBufferToImageBase64(res, options?.mimeType || 'image/png')
    }

    // 兼容如果后端返回了可直接访问的 URL（SignedUrl 或普通 URL）
    if (typeof res === 'string') {
      return res
    }

    return ''
  } catch (error) {
    // console.error($t('competition.validation.imageLoadFailed'), error)
    return ''
  }
}

